The Business
Groups & Committees manages voluntary member participation programs in CHAD2. Understanding why these exist and who uses them helps you design tests that matter.
🎯 What Groups & Committees Are Really About
Groups & Committees are voluntary participation programs that bring members together around shared interests, professional development, or business opportunities. Unlike the rigid structure of formal organizational charts, these programs are flexible: individuals join and leave, roles change, and membership evolves over time. The system must track who's in, who's out, when people joined, what roles they have, and how actively they're participating.
Committees are typically working groups with individual-forward data structures. You manage individual participation, roles, and attendance. Committees can be Standing (regular monthly meetings) or Planning (event-based). They have classifications (managed by admins), year data (copy forward with term increments), and tracking for individual participants. Enhanced committees also support meeting management: notes, file uploads, and historical attendance records.
Groups are typically more company-forward: subscriber groups, marketing groups, peer groups. They can include both companies and individuals. Groups have notes functionality (browse, add, edit, upload files), classifications (similar to committees), and year-over-year copy behavior. Groups are often used for outreach, targeted communications, and company-level participation tracking.
👥 Committees: Standing and Planning
Standing committees meet on a regular monthly schedule. Individuals apply or are invited to join, and they remain members until they opt out. Standing committees track attendance at each meeting, record notes, and maintain member roles (e.g., Chair, Vice Chair, Member). Over time, committees "copy" to a new year: existing members are carried forward, terms increment, but attendance and notes from the prior year remain archived.
Planning committees are formed for a specific event or project. They have a defined scope, timeline, and often limited membership. When the project ends, the planning committee can be archived. Like standing committees, planning committees track attendance, roles, and can have historical records.
Both types support classifications (admin-assigned categories for sorting and filtering), member roles (Chair, Co-Chair, Member, etc.), and attendance tracking that evolved into meeting management — the ability to record meeting notes, upload files, view past meetings with annotated attendance, and edit meeting records.
🏢 Groups: Subscribers, Marketing, Peer
Subscriber groups include companies and/or individuals enrolled in a service or program. Marketing groups include members targeted for a specific campaign or initiative. Peer groups include members at a similar business stage who meet for peer learning and networking. Groups can be company-forward (e.g., "All commercial construction companies") or individual-forward (e.g., "Business development professionals").
Groups support notes at the group level: browse group notes, add new notes with optional file uploads, edit existing notes. Classifications work the same way as in committees: admin-managed, applied to organize and filter groups. Groups also copy year-over-year, carrying forward members and settings but maintaining separate historical records.
Groups are often used for targeted reporting: email lists, SMS/MMS lists, contact rosters, attendance reports, and participation analysis. Portal users can see their groups (unless set to Private), and company POCs can manage company membership in groups.
📋 Data Value: What Members Get, What Chapters Get, What National Gets
For member companies and individuals, Groups & Committees provide a way to engage in professional development, networking, and peer learning. Portal users see their committees and groups, can view meeting notes and past attendance, and on committees, can remove themselves (opt-out).
For chapters, Groups & Committees are operational tools for organizing members around strategic initiatives. Chapters manage committee and group membership, track attendance, manage classifications, run reports (rosters, email lists, attendance, participation analysis), and use these programs for targeted outreach and engagement.
For National, Groups & Committees represent member engagement and program adoption metrics. National sees which committees and groups exist across all chapters, tracks member participation, monitors program effectiveness, and uses this data to inform national strategy.
How It Works
Complete workflows for managing committees, groups, member participation, and year-over-year operations
🏗️ Committee Lifecycle: Create → Manage Members → Track Attendance → Copy Year
Creating a committee requires Name, Type (Standing or Planning), and Status. Optional fields: Description, Classifications, Member Roles (Chair, Vice Chair, etc.), Start Date, End Date. If a Standing committee, you can set it to recur monthly. You can immediately add individuals as members with assigned roles.
Managing members means adding, removing, and updating individual participation. An individual can be added by staff or can request to join. Each member has a Role (e.g., Chair, Member) and Status (Active, Inactive, Removed). If a member is moved to a different company in Contacts, they remain on the committee but their company association updates. If a member is deleted from Contacts, they should be auto-removed from the committee (test this cascade).
Tracking attendance evolved into meeting management. When you create a meeting, you record who attended, who was absent. You can add meeting notes and upload files (agendas, minutes, etc.). You can view historical meetings, edit past attendance records, and generate attendance reports. The system maintains a complete audit trail of meeting history.
Copying a committee to a new year is a critical operation. When you copy: existing members are carried forward (with their roles and status), the year increments (if applicable), new meetings are created for the new year's schedule, but all prior-year attendance and notes are archived separately. If you copy and then modify (e.g., remove a member, add meeting notes to the new year), those changes must not affect the prior-year records.
🔄 Member Management: Add → Role Assignment → Track Changes → Delete
Adding a member to a committee or group links an individual (or company for groups) to the program. You can add by selecting an existing contact, or by inviting (sending an email invite). When you add, you assign the member a role (for committees) or classification (for groups).
Role assignment for committees: Chair, Vice Chair, Secretary, Treasurer, Member, etc. An individual can have only one primary role per committee but can have additional secondary roles. For groups, members simply belong; no roles.
Tracking changes maintains a history of membership modifications. When you add/remove a member, the system records the date, the action, and who made the change. If a member's role changes, that's also tracked. This history is critical for audit and reporting.
Removing a member (soft delete or archive): the member is marked inactive or removed, but the record remains for historical tracking. Hard deletion of members is not permitted if there's any historical data (attendance records, meeting participation, role history). Members can also opt-out (portal-side) if the committee allows self-removal.
📝 Meeting Management and Attendance Tracking
Meeting creation for committees: you specify the date, location, and initial attendee list. You can record who attended and who was absent. You can add meeting notes (agenda, minutes, decisions, action items). You can upload files (agenda documents, meeting recordings, etc.).
Attendance tracking records which individuals were present or absent at each meeting. This data feeds into attendance reports and can be used to flag low-participation members. For committees with year-over-year operations, attendance data is tied to the specific year.
Historical meeting management: once a meeting is recorded, you can view it, edit attendance records, update notes, add/remove attached files. You can also generate meeting rosters showing who was invited vs. who attended. The system maintains a complete meeting history per committee.
📊 Group Notes and Classification Management
Group notes are a browse-and-edit feature. You can view all notes tied to a group, add new notes with optional file uploads, and edit existing notes. Notes can be internal (staff-only) or shared (visible to certain portal users). Notes are dated and attributed to the user who created them.
Classifications (for both committees and groups) are admin-managed categories used for organization and filtering. Examples: "Priority Committee," "Member Engagement," "Strategic Initiative." Classifications are applied to the committee/group record and used in browse filters, reporting, and portal display logic.
Applying classifications is multi-select: a committee or group can have one or more classifications. You can filter committees/groups by classification, and reports can segment data by classification.
🔗 Contact Integration: Cross-Module Member Management
Individual record in Contacts: when you view an individual, there's a Groups & Committees tab showing all committees and groups they belong to. You can manage their membership from this tab: add them to committees/groups, remove them, change roles/classifications.
Company record in Contacts: there's a Groups tab showing all groups the company belongs to (relevant for company-forward groups). You can manage group membership from this tab. There's also enhancement to add Committees & Groups tab showing both committees (via individual members) and groups (at company level).
Cascading updates: if an individual is deleted from Contacts, they should be auto-removed from all committees/groups. If a company is deleted, it should be auto-removed from all groups. This requires careful data validation and possibly cascade rules.
Glossary
Key terms and concepts in the Groups & Committees module
Committee
A voluntary member group with a defined purpose, typically individual-forward. Can be Standing (regular meetings) or Planning (event-based). Tracks individual participation, roles, and attendance.
Standing Committee
A committee with regular, recurring meetings (typically monthly). Members remain active until opt-out. Supports year-over-year copying.
Planning Committee
A committee formed for a specific event, project, or initiative. Has a defined scope and timeline. Can be archived when the project completes.
Group
A voluntary member collection, typically company-forward or individual-forward. Includes Subscriber Groups, Marketing Groups, Peer Groups. Supports notes and classifications.
Subscriber Group
A group of companies/individuals enrolled in a specific service or program. Used for subscription-based engagement and communications.
Marketing Group
A group of members targeted for a specific marketing campaign, initiative, or promotional effort.
Peer Group
A group of members at similar business stages who meet for peer learning, best practice sharing, and networking.
Classification
Admin-managed category applied to committees/groups for organization and filtering. Examples: "Priority," "Strategic Initiative," "Member Engagement."
Attendance
Record of individual presence or absence at a committee meeting. Used for participation tracking and engagement metrics.
Meeting Management
Enhanced feature for recording meeting details: date, location, attendees, notes, file uploads. Supports historical meeting records and view/edit/delete operations.
Member Role
Position or responsibility of an individual within a committee (e.g., Chair, Vice Chair, Secretary, Treasurer, Member).
Year Data
Fiscal or calendar year associated with a committee or group. Supports year-over-year copy operations, term increments, and historical data archiving.
Year-over-Year Copy
Process of copying a committee or group to a new year, carrying forward members and settings while maintaining separate historical records.
Term
Duration of membership or role within a committee, often tied to year data. Terms increment when a committee is copied to a new year.
Group Notes
Dated, authored notes added to a group record. Can include text and file attachments. Supports browse, add, edit functionality.
Change History
Audit trail recording all modifications to a committee or group, including who made the change, when, and what changed.
Test Strategy
Comprehensive approach to testing the Groups & Committees module
🎯 Coverage Goals and Risk Areas
Coverage goals should include all BREAD operations for committees and groups, member management (add/remove/update), attendance/meeting tracking, classifications, notes, year-over-year copy, cross-module integration (Contacts), and reporting. Prioritize high-risk areas: deletion rules (ensuring no orphaned or dependent data), year-copy operations (verifying historical data integrity), and cross-module cascading (ensuring Contacts changes sync correctly).
High-risk scenarios include: copying a committee with active members and historical attendance, then modifying the new year without affecting the old. Deleting a member who has meeting attendance history (should fail). Removing a classification in use (should cascade or fail). Changing a member's company in Contacts (should update the committee member's company association). Building complex group membership with both companies and individuals, then reporting on membership.
🔐 Permission Levels and Access Control
Permission levels (0-3) apply to Groups & Committees like all other modules:
- Level 0 (No Access): User cannot see or access committees/groups.
- Level 1 (Read Access): User can browse and search committees/groups but cannot create, edit, or delete.
- Level 2 (Edit Access): User can perform full BREAD operations on committees/groups.
- Level 3 (Admin/Settings Access): User can manage settings, classifications, and advanced features like bulk operations.
Portal users see only their assigned committees/groups (unless set to Private). Portal users can view meeting notes and historical attendance but typically cannot edit or add members (staff-only).
🌐 Test Environments and Data Needs
Recommended test environments: DEV (for feature testing), TEST (for integration and regression), and optionally STAGING (for end-to-end user acceptance). G&C testing should include data setup in Contacts (companies and individuals to populate committees/groups) and realistic scenarios (multiple years, various classifications, large membership lists).
Test data needs: at least 10 test companies and 50 test individuals (varies by role, location, classification), sample committees (standing and planning), sample groups (subscriber, marketing, peer), historical data (prior-year committees with attendance records), and various role/classification combinations.
Prerequisite validation: before testing G&C features, verify Contacts data is clean and complete. Verify that Contacts permission levels work correctly. Verify that cross-module data sync is functioning (changes in Contacts are reflected in G&C).
⚡ Key Test Scenarios
Committee BREAD: Create committees (standing and planning), read/view committee details, edit name/description/classifications, delete committees (with and without members).
Group BREAD: Create groups (all types), read/view group details, edit name/members/classifications, delete groups (with and without members).
Member management: Add/remove members, assign roles, update member info, track membership changes, test member opt-out.
Attendance/meetings: Create meetings, record attendance, add notes, upload files, edit past meetings, view meeting history.
Year-over-year: Copy committees to new years, verify member carry-forward, verify historical data archiving, test independent editing of old vs. new years.
Classifications: Apply/remove classifications, filter by classification, test that classifications are consistent across modules.
Notes and files: Add group notes, edit notes, upload/download files, test file format support and size limits.
Reporting: Generate rosters (PDF and Excel), email lists, SMS/MMS lists, attendance reports, participation analysis. Test filtering and export accuracy.
Contact integration: Manage G&C membership from Contacts Individual/Company record, test cascading deletes, test changes sync correctly.
Business Rules & Gotchas
Critical validation rules, constraints, and edge cases that define how the module behaves
Level 0 (No Access): User cannot see committees/groups in browse, search, or navigation. If they try to access a specific URL, they see "No Access" error.
Level 1 (Read Access): User can browse and search committees/groups, view details, generate reports, but all action buttons (Edit, Delete, Add Member, etc.) are disabled or hidden. View-only mode.
Level 2 (Edit Access): User can create, read, update, delete committees/groups, add/remove members, manage meeting records. Full BREAD operations. Cannot access Admin settings or bulk operations.
Level 3 (Admin): User can perform all Level 2 operations plus manage classifications, configure settings, perform bulk operations, and access advanced features.
Groups: Can only be deleted if the group has NO companies AND NO individuals (active or inactive). If a group has any member, deletion fails with message "Cannot delete group with active members. Please remove all members first."
Committees: Can only be deleted if the committee has NO current individuals AND NO historical individuals ever. This is stricter than groups: even if all current members have been removed, if the committee ever had attendance records, it cannot be deleted. Deletion fails with "Cannot delete committee with member history. Please contact support if needed."
Why the difference? Groups are typically simpler and ephemeral (can be recreated). Committees are governance bodies with formal records, and deleting a committee with history could lose audit trail. Test this strict rule carefully.
Year data is a critical dimension in G&C. Committees and groups can be tied to fiscal years (e.g., 2024, 2025). When you copy a committee to a new year: existing members are carried forward (with their roles preserved), terms increment (e.g., 2024 → 2025), but all prior-year attendance, notes, and meeting records stay archived under the old year.
Copy operation safeguards: Copying should not duplicate members (if you copy twice, you should not get double members). Copying should not affect the prior-year record. Copying should create a blank slate for meetings (no prior meetings in the new year).
Independent modification: After copying, the new year is independent. You can add/remove members in the new year without affecting the old year. You can record new meetings in the new year. The old year remains read-only (or at least, edits to the old year do not cascade to the new year).
Group notes are timestamped, authored, and support file attachments. You can browse all notes, add new notes, edit existing notes (updating the timestamp and attribution).
File upload constraints: Typical limits are file size (e.g., 25 MB per file), file type (common formats like PDF, DOC, XLS, JPG), and storage (max attachments per note or per group). Test these boundaries.
Note visibility: Notes can be marked Internal (staff-only) or Shared (visible to certain portal users). Test that portal users cannot see Internal notes, but staff can see all.
Edit history: When a note is edited, does the system track who edited it and when? Or does it just update the attribution to the current user? Clarify this behavior and test it.
Classifications are admin-managed categories (e.g., "Priority," "Strategic Initiative," "Member Engagement"). A committee or group can have multiple classifications (multi-select). Classifications are used for: browse filtering (show all committees tagged "Priority"), reporting (segment results by classification), and portal logic (e.g., only show "Public" classifications to non-staff).
Classification management: Admins can create, edit, and delete classifications. Deleting a classification in use should either cascade (remove the tag from affected records) or fail (prevent deletion if in use). Test this behavior.
Filtering accuracy: If a committee has classifications "Priority" and "Strategic," searching for "Priority" should return it. Filtering by multiple classifications should use OR logic (show records matching ANY of the selected classifications) or AND logic (show records matching ALL)? Clarify and test.
Individual deleted in Contacts: Should trigger auto-removal from all committees/groups. The removal should be logged in change history. If the individual has meeting attendance records, those records should be preserved (not deleted), but the member record should be marked inactive/removed.
Company deleted in Contacts: Should trigger auto-removal from all groups (if groups include that company). For committees, if the deleted company was associated with a committee member (individual with that company), what happens? Likely the committee member is unaffected, but their company association in the committee member record should update to "Company Deleted" or similar.
Individual moved to new company in Contacts: The committee/group membership should remain unchanged. The committee member record should show the updated company association. Employment history in Contacts should be separate from committee membership history in G&C.
Sync timing: Are these cascades real-time or batch? If real-time, test that the UI reflects changes immediately. If batch, understand the batch schedule and test that delayed sync doesn't cause data inconsistency.
National sync may apply to committees/groups if they are defined at the national level and synced to chapters. For example, a national committee (e.g., "National Standards Committee") might be synced to all chapters, and each chapter manages its own local membership.
Local overrides: Chapters can override national settings (e.g., change the committee name, modify classifications, remove members). If national data changes, do local overrides persist? Typically yes, but test this collision scenario.
Sync direction: Is it one-way (national → chapter) or bidirectional? If a chapter makes changes, does it sync back to national? Clarify the sync rules and test edge cases like simultaneous updates.
Company Name column in individual tables: When viewing committee or group members, individual rows should display the member's company name (from their Contacts record). If company is deleted, display "Company Deleted" or similar. If company changes, the column should update.
Browse Companies filter enhancement: The Browse Companies view should add a multi-select filter for "Groups" and "Committees." Selecting "Finance Group" should return all companies in that group. Selecting multiple filters should use OR logic (show companies in Finance Group OR Steering Committee).
Browse Individuals filter enhancement: The Browse Individuals view should add "Groups" and "Committees" multi-select filters. Selecting "Q2 Planning Committee" should return all individuals in that committee.
Company Group/Committee association: If a group is company-forward, companies should be able to see it in their portal. If a committee has individual members from a company, should the company see the committee? Likely not (unless the company is associated with the committee as a group). Clarify and test.
Scenario Thinking
Complex multi-step scenarios that test real-world workflows and edge cases
Setup: Create a standing committee "Finance Committee" for 2024 with 5 founding members (Chair, Vice Chair, 3 Members). Record attendance for Q1, Q2, Q3 meetings in 2024. Add notes and files to Q2 meeting.
Copy operation: Copy "Finance Committee" from 2024 to 2025. Expected result: all 5 members carry forward to 2025, but Q1-Q3 meetings and notes stay archived under 2024. 2025 has no meetings initially.
Modify 2025: Add a new member (6th person) to the 2025 committee. Remove the Vice Chair from 2025. Record Q1 2025 meeting with only 5 attendees (the new member wasn't at the first meeting). Add different notes to Q1 2025 meeting.
Verify data integrity:
- 2024 still shows 5 members, Q1-Q3 meetings with original attendance and notes.
- 2025 shows 6 members, only Q1 meeting, with new notes, Vice Chair removed.
- Editing Q1 2025 notes does not affect Q2 2024 notes (vice versa).
- Generating 2024 vs. 2025 attendance reports shows correct data for each year.
Setup: Individual "John Doe" works for "ABC Corp." John is added to the "Steering Committee" with role "Member." He attends 3 meetings, accumulating attendance history.
Company change: In Contacts, John's employment is updated: he moves from "ABC Corp" to "XYZ Inc." In Contacts, an employment history record is created (dates, old company, new company).
Verify G&C impact: John's Steering Committee membership should remain active (he doesn't automatically leave). His committee member record should now show company "XYZ Inc." (not ABC Corp). His prior attendance records should be preserved and attributed to John (not lost).
Attempt deletion: In Contacts, try to delete John's employment history record. This should fail if John has committee membership (data integrity). In G&C, try to delete John from the committee. This should succeed (soft delete). But if you try to hard-delete the committee member record, it should fail (because of attendance history).
Setup: Create a group "Commercial Contractors Peer Group" including 3 companies (ABC Corp, XYZ Inc, DEF LLC) and 10 individuals from various companies. Add classifications: "Peer Learning," "Strategic Focus." Add group notes with documents (agenda, past minutes).
Reporting: Generate a membership roster (PDF) showing companies and individuals. Generate an email list (CSV) of all individual emails for outreach. Generate a "Counts by Company" report.
Filtering: Use Browse Companies filter to show only companies in "Commercial Contractors Peer Group." Verify ABC Corp, XYZ Inc, DEF LLC appear. Use Browse Individuals filter to show only individuals in that group. Verify all 10 appear (or 13 if you count the 3 company primary contacts).
Modification: Remove one company (ABC Corp) from the group. Rerun reports and filters. Verify ABC Corp no longer appears. Email list should now have 2 fewer emails (if ABC Corp had 2 individuals in the group).
Setup: Create 10 committees with mixed classifications: "Priority" (3 committees), "Member Engagement" (5 committees), "Strategic Initiative" (6 committees). Some committees have multiple classifications.
Filter and browse: Filter by "Priority" classification. Verify 3 committees appear. Filter by "Member Engagement." Verify 5 committees appear. Filter by both (using multi-select). Depending on logic (OR vs. AND), verify results: OR should return 8 (3 + 5, minus overlaps); AND might return 0 if no committee has both.
Bulk operation: Select all "Priority" committees and bulk-add a new classification "Executive Review." Verify all 3 are updated. Refilter and verify they now appear under both "Priority" and "Executive Review."
Delete classification: Try to delete "Priority" classification. Depending on business rule, this should either fail (cannot delete in-use classification) or succeed with cascading removal from all 3 committees. Test the implemented behavior.
Setup: Create a committee meeting on Jan 15, 2025. Record attendance (10 present, 2 absent). Add meeting notes "Q1 Planning Discussion - see attached agenda and preliminary budget."
File upload: Upload 2 files: "Q1_Agenda.pdf" (500 KB) and "Draft_Budget.xlsx" (2 MB). Verify both appear in the meeting record.
Edit meeting: Two weeks later, update notes to "Q1 Planning Complete - approved budget is in the final file." Delete the draft budget, upload "Final_Budget.xlsx" (3 MB). Verify: old draft is gone, new final version is available, note text is updated, timestamp shows edit date.
View historical meeting: From the committee history, click back to view this meeting. Verify: current note and files are shown (not prior version). Check audit trail if available: does system show that notes were edited on [date] by [user]?
Permission check: Log in as portal user (read-only). Try to edit the meeting notes. Should be denied. Try to delete a file. Should be denied. Try to download a file. Should succeed.
Setup: In Contacts, view an individual "Jane Smith." Navigate to the "Groups & Committees" tab. Jane is a member of 3 committees ("Steering," "Finance," "Marketing") and 2 groups ("Peer Group," "Subscriber Group").
View membership: Tab shows all committees and groups Jane belongs to, with role/classification, join date, and status. Click on "Steering Committee" to view her role (Chair), term (2024-2025), and attendance record.
Manage membership: From this tab, remove Jane from "Marketing Committee." Verify removal is logged in G&C change history. Verify that the Marketing Committee no longer shows Jane as a member.
Add membership: From this tab, add Jane to a new committee "Audit Committee" with role "Member." Verify the Audit Committee now lists Jane. Verify she can see it in her portal (if portal is enabled).
Delete individual: Delete Jane's Contacts record. Verify: Jane is auto-removed from all G&C records, no orphaned references remain, change history logs the removal, and all prior attendance records are preserved (not deleted).
Regression Checklists
Systematic checklists for regression testing organized by feature area
- Create standing committee with minimal data (name, type, status)
- Create standing committee with all optional fields (description, classifications, start/end dates)
- Create planning committee with specific scope and timeline
- Verify committee appears in browse list immediately after creation
- Read committee detail page and verify all fields display correctly
- Edit committee name and verify change is reflected and logged in change history
- Edit committee classifications and verify multi-select works
- Edit committee description and verify formatting is preserved (if rich text)
- Add members to committee and verify they appear in member list
- Try to delete committee with 0 members (should succeed)
- Add a member, then try to delete committee (should fail with appropriate error)
- Remove member, then try to delete again (should fail if member has history; succeed if no history)
- Verify delete fails with clear error message explaining the constraint
- Verify deleted committees do not appear in browse list
- Verify hard-deleted committees cannot be recovered (confirm with stakeholders if recovery is needed)
- Create subscriber group with company members only
- Create subscriber group with individual members only
- Create subscriber group with mixed company and individual members
- Create marketing group with classifications and description
- Create peer group and verify it appears in browse immediately
- Read group detail and verify all members are listed (both companies and individuals)
- Edit group name, description, and classifications
- Add a company to the group mid-lifecycle (after initial creation)
- Add an individual to the group mid-lifecycle
- Verify added members appear in the group
- Remove a company member from the group
- Remove an individual member from the group
- Try to delete group with 0 members (should succeed)
- Add a member, try to delete group (should fail)
- Remove member, try to delete (should succeed)
- Verify deleted groups do not appear in browse
- Add an individual to a committee by selecting existing Contacts record
- Add an individual by inviting (email invite flow)
- Assign a role (Chair, Vice Chair, Member) when adding
- Verify member appears in committee member list with correct role
- Update member role (e.g., change from Member to Vice Chair)
- Verify role change is reflected and logged in change history
- Update member status (e.g., Active to Inactive)
- Verify inactive members are marked but not removed
- Remove member from committee
- Verify removed members no longer appear in active member list (but may appear in history)
- Try to delete a member record with attendance history (should fail)
- Add same individual to multiple committees and verify they appear in each
- Remove individual from one committee and verify they remain in others
- Test bulk add (if supported): add multiple members at once
- Test bulk remove (if supported): remove multiple members at once
- Verify member add/remove operations log correctly in change history
- Create a meeting with date, location, and initial attendee list
- Record attendance (present/absent) for each attendee
- Verify attendance data is saved and displayed correctly
- Add meeting notes with text content
- Verify notes are saved and displayed in meeting detail
- Edit meeting notes and verify timestamp and attribution update
- Upload a file to the meeting (PDF, DOC, etc.)
- Verify file is attached and can be downloaded
- Upload second file and verify both are listed
- Delete a file from the meeting and verify it's removed from list
- Test file size boundary (upload near max size limit)
- Generate attendance report for the meeting
- Verify attendance report lists all attendees with correct status
- View historical meeting and verify all data (attendance, notes, files) is preserved
- Attempt to edit historical meeting and verify edit is allowed (or denied if read-only)
- Verify meeting deletions are logged and historical records are retained
- Assign a single classification to a committee
- Verify classification appears in committee detail
- Assign multiple classifications to the same committee (multi-select)
- Verify all classifications are displayed
- Remove a classification and verify it's no longer shown
- Filter committees by classification and verify results are accurate
- Filter by multiple classifications and verify OR/AND logic (clarify which applies)
- Apply classifications to a group and verify multi-select works
- Filter groups by classification
- Create a new classification and assign to committees/groups
- Try to delete a classification in use (should fail or cascade appropriately)
- Delete a classification not in use (should succeed)
- Verify classification changes are logged in change history
- Test permission-aware classification display (do non-admin users see all classifications?)
- Verify copy button only appears for eligible committees (standing, with historical data)
- Copy a committee from 2024 to 2025
- Verify all members are carried forward to 2025
- Verify prior-year meetings and notes are archived under 2024
- Verify 2025 starts with no meetings initially
- Verify members' prior attendance records are not duplicated
- Add new member to 2025 committee and verify 2024 is unaffected
- Remove a member from 2025 and verify 2024 still has all members
- Record meetings in 2025 and verify prior-year meetings remain unchanged
- Copy a group to a new year and verify members carry forward
- Verify prior-year group notes are archived separately
- Add new notes to the new year group and verify old notes remain in old year
- Try to copy the same committee twice and verify no duplicate members are created
- Verify term increment (if applicable) occurs correctly during copy
- Generate reports for both years and verify they show separate data
- Generate committee roster (PDF) and verify all members are listed
- Generate group membership roster (Excel) and verify companies and individuals are listed
- Generate email list (CSV) from committee members and verify email format is correct
- Generate SMS/MMS list and verify phone numbers are valid
- Generate attendance report for a committee and verify attendance counts are accurate
- Generate non-participation report and verify members with low participation are flagged
- Generate "Counts by Company" report for a group
- Verify report filtering works (filter by classification, date range, status)
- Export a large group membership list (100+ members) and verify performance
- Verify exported data can be opened in Excel/Google Sheets without corruption
- Test report generation after bulk operations (bulk add/remove members)
- Verify reports reflect current data (not stale cache)
- Test permission-based report visibility (should portal users see all reports?)
- Test scheduled reports (if supported): verify they generate on schedule
- Open Contacts individual record and navigate to "Groups & Committees" tab
- Verify all committees and groups the individual belongs to are listed
- From the tab, add the individual to a new committee and verify it syncs to G&C
- From the tab, remove the individual from a committee and verify removal in G&C
- Open Contacts company record and navigate to "Groups" tab (if applicable)
- Verify all groups the company belongs to are listed
- From the tab, add the company to a new group and verify it syncs to G&C
- Delete an individual from Contacts and verify auto-removal from all G&C records
- Verify deletion is logged in G&C change history
- Verify prior G&C attendance records are preserved (not deleted with the individual)
- Move an individual to a different company in Contacts
- Verify the G&C committee member record updates to show the new company
- Verify committee membership remains active (individual doesn't leave the committee)
- Delete a company from Contacts that's associated with a group
- Verify company is auto-removed from the group
- Verify no orphaned data remains in G&C
- Open Browse Committees and verify list loads correctly
- Filter by committee type (Standing vs. Planning) and verify results
- Filter by classification and verify only tagged committees appear
- Filter by status (Active, Archived, Inactive) and verify results
- Combine multiple filters and verify AND/OR logic works correctly
- Clear filters and verify full list is restored
- Open Browse Companies and verify new "Groups" and "Committees" filters are present
- Filter companies by "Groups" and select a group, verify only companies in that group appear
- Filter companies by "Committees" and select a committee, verify only companies with members in that committee appear
- Open Browse Individuals and verify "Groups" and "Committees" filters are present
- Filter individuals by group and verify only members of that group appear
- Filter individuals by committee and verify only committee members appear
- Test filter persistence: apply filters, navigate away, return to page, verify filters are cleared (or persisted if designed that way)
- Test filter performance with large datasets (1000+ records)
- As Level 0 (No Access) user: verify G&C module is not visible in navigation
- As Level 0 user: try to access G&C URL directly and verify "No Access" error
- As Level 1 (Read) user: verify Browse Committees and Browse Groups are available
- As Level 1 user: verify all action buttons (Edit, Delete, Add Member) are disabled or hidden
- As Level 1 user: verify you can view committee/group details and generate reports
- As Level 1 user: try to edit a committee (e.g., POST to update endpoint) and verify denial
- As Level 2 (Edit) user: verify Create, Edit, Delete, and member management buttons are enabled
- As Level 2 user: create a committee and verify success
- As Level 2 user: edit a committee and verify success
- As Level 2 user: try to access Admin settings and verify denied
- As Level 3 (Admin) user: verify Admin settings are accessible
- As Level 3 user: verify all BREAD operations succeed
- As Level 3 user: verify bulk operations are available (if implemented)
- Test portal users: verify they see only their assigned committees/groups
- Test portal users: verify they cannot edit member lists (staff-only operation)
Environment & Data Setup
Test environment configuration, prerequisite data, and setup procedures
🔧 Test Environment Requirements
Recommended environments: DEV (for feature testing and rapid iteration), TEST (for integration and regression testing), STAGING (optional, for end-to-end UAT). Each environment should have a full copy of the CHAD2 schema with sample data. G&C testing requires Contacts data to be present (companies and individuals).
Database state: Each test run should start with a clean database state (or predictable state with known test data). Use data fixtures or seed scripts to populate test data consistently. After each test run, clean up test records to avoid pollution.
Performance baseline: Measure baseline performance for key operations (create committee, add 100 members, copy committee, generate report) so you can detect regressions. In a large-scale environment (10K+ committees, 100K+ members), performance bottlenecks may emerge that don't show in small test datasets.
📊 Test Data Requirements
Minimum viable test dataset:
- 10 companies (various sizes, types, locations)
- 50 individuals (distributed across companies, various roles)
- 5 standing committees (with mixed membership, different years)
- 3 planning committees (for specific events/projects)
- 5 groups (subscriber, marketing, peer groups with mixed company/individual members)
- Historical data: at least 2 years of standing committee data with attendance records, meetings, notes
- Classifications: at least 10 distinct classifications applied across committees/groups
Extended test dataset (for performance and stress testing):
- 100+ companies with realistic hierarchy (parent/subsidiary)
- 1000+ individuals with varied attributes (locations, roles, contact info quality)
- 50+ committees with large memberships (100-500 members each)
- 20+ years of historical data for standing committees
- 10000+ meeting records with attendance and notes
👤 User Permission and Role Setup
Test user accounts:
- Admin user: Level 3 permission on G&C, Contacts, and all modules. Used for configuration, data setup, and admin-level testing.
- Staff user (Chapter): Level 2 permission on G&C and Contacts. Used for committee/group management, member operations.
- Limited staff user: Level 1 permission on G&C. Can browse and report but cannot edit.
- Portal member (MPA): Portal user with high permissions on their company. Can manage their company's G&C memberships (from the Contacts integration tab).
- Portal member (Limited): Portal user with read-only access. Can view their committees/groups but cannot edit.
Chapter-specific users: Set up users for different chapters (if multi-chapter testing is in scope). Verify that chapter-level data isolation works (Chapter A staff cannot edit Chapter B committees).
National admin users: If National-level sync is in scope, set up National admin users who can manage national-level committees/groups that sync to chapters.
🔗 Prerequisite Data and Configuration
Before testing G&C, verify these prerequisites are in place:
- Contacts module: Companies and individuals are created and can be browsed.
- Contact Types: Standard contact types exist (Owner, Controller, Manager, etc.).
- Permissions: User permission levels are configured correctly for test users.
- Lookup tables: Classifications, member roles, group types are configured.
- Portal settings: Portal is enabled/disabled as needed for testing; portal users are created and invited.
- Reporting module: Reporting is available for G&C report testing.
- Integration points: Cross-module integration (Contacts, Reporting, Directory if applicable) is wired up.
Data cleanup: After testing, clean up test records to avoid pollution. Use truncate or delete statements to clear test data, but preserve production-like sample data for regression testing.
📋 Test Execution Checklist
Before executing tests:
- Verify test environment is up and accessible (database, API, UI all running)
- Verify test data is loaded and ready
- Verify test user accounts are created and passwords are known
- Verify test environment reflects target feature branch or release version
- Verify permissions are correctly configured (Level 0-3, portal access)
- Verify baseline performance metrics are captured
- Verify test execution logs are configured to capture errors and warnings
- Verify change history and audit trails are enabled for testing
Post-test cleanup:
- Delete test committees and groups created during testing
- Remove test members added during testing
- Reset test user accounts (clear change history, reset permissions if modified)
- Verify no test data remains that could contaminate next test run
- Archive test logs and results for trend analysis